// popup.js - 视频录制助手弹出界面

document.addEventListener('DOMContentLoaded', function() {
  const videoList = document.getElementById('video-list');
  const refreshBtn = document.getElementById('refresh-btn');
  const pageRefreshBtn = document.getElementById('page-refresh-btn');
  const startRecordingBtn = document.getElementById('start-recording-btn');
  const stopRecordingBtn = document.getElementById('stop-recording-btn');
  const screenshotBtn = document.getElementById('screenshot-btn');
  const recordingStatus = document.getElementById('recording-status');
  const statusDiv = document.getElementById('status');
  const videoSelector = document.getElementById('video-selector');
  const videoDropdown = document.getElementById('video-dropdown');

  let isRecording = false;
  let recordingStartTime = null;
  let current_videos = []; // 存储当前检测到的视频列表
  let selected_video_index = -1; // 当前选中的视频索引

  // 通用错误处理函数
  function handle_error(error, context) {
    let error_message = '未知错误';
    
    if (typeof error === 'string') {
      error_message = error;
    } else if (error && error.message) {
      error_message = error.message;
    } else if (error && typeof error.toString === 'function') {
      error_message = error.toString();
    }
    
    console.error(`${context} 错误:`, error_message);
    statusDiv.textContent = `${context}失败：${error_message}`;
  }

  // 初始化按钮状态
  function initialize_button_states() {
    startRecordingBtn.disabled = false;
    stopRecordingBtn.disabled = true;
    screenshotBtn.disabled = false;
    recordingStatus.textContent = '准备就绪';
  }

  // 设置录制状态
  function set_recording_state(recording) {
    isRecording = recording;
    startRecordingBtn.disabled = recording;
    stopRecordingBtn.disabled = !recording;
    screenshotBtn.disabled = recording; // 录制时禁用截图按钮
    
    if (recording) {
      recordingStatus.innerHTML = '<span class="recording-indicator"></span>录制中...';
    } else {
      recordingStatus.textContent = '准备就绪';
    }
  }

  // 显示/隐藏视频选择器
  function toggle_video_selector(show, videos = []) {
    if (show && videos.length > 1) {
      videoSelector.style.display = 'block';
      update_video_dropdown(videos);
    } else {
      videoSelector.style.display = 'none';
      selected_video_index = -1;
    }
  }

  // 页面刷新功能
  function refresh_page() {
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
      const current_tab = tabs[0];
      
      if (!current_tab) {
        statusDiv.textContent = '无法获取当前标签页';
        return;
      }
      
      // 检查URL是否支持刷新
      if (current_tab.url.startsWith('chrome://') || 
          current_tab.url.startsWith('about:') || 
          current_tab.url.startsWith('chrome-extension://') ||
          current_tab.url.startsWith('moz-extension://') ||
          current_tab.url.startsWith('edge://')) {
        statusDiv.textContent = '当前页面不支持刷新（浏览器内部页面）';
        return;
      }
      
      // 显示刷新状态
      statusDiv.textContent = '正在刷新页面...';
      pageRefreshBtn.disabled = true;
      
      // 刷新页面
      chrome.tabs.reload(current_tab.id, {}, function() {
        if (chrome.runtime.lastError) {
          const error_message = chrome.runtime.lastError.message || '未知错误';
          statusDiv.textContent = '页面刷新失败：' + error_message;
          pageRefreshBtn.disabled = false;
        } else {
          statusDiv.textContent = '页面刷新成功，请等待页面加载完成后重新检测视频';
          pageRefreshBtn.disabled = false;
          
          // 延迟重新检测视频
          setTimeout(() => {
            refresh_video_list();
          }, 3000); // 3秒后重新检测
        }
      });
    });
  }

  // 更新视频下拉框选项
  function update_video_dropdown(videos) {
    // 清空现有选项
    videoDropdown.innerHTML = '<option value="">请选择视频</option>';
    
    // 添加视频选项
    videos.forEach((video, index) => {
      const option = document.createElement('option');
      option.value = index;
      
      // 构建更详细的视频信息用于区分
      const title = video.title || `视频 ${index + 1}`;
      const status = video.isPlaying ? '播放中' : '已暂停';
      const duration = format_duration(video.duration);
      const url_info = get_url_info(video.url);
      
      // 组合显示信息
      let display_text = `${title} | ${status} | ${duration}`;
      if (url_info) {
        display_text += ` | ${url_info}`;
      }
      
      option.textContent = display_text;
      videoDropdown.appendChild(option);
    });
    
    // 默认选择第一个视频
    if (videos.length > 0) {
      videoDropdown.value = 0;
      selected_video_index = 0;
      // 更新上方视频列表显示
      display_selected_video(videos[0]);
    }
  }

  // 获取URL的简短信息用于区分
  function get_url_info(url) {
    if (!url) return '';
    
    try {
      const url_obj = new URL(url);
      // 提取域名和文件名
      const domain = url_obj.hostname;
      const pathname = url_obj.pathname;
      const filename = pathname.split('/').pop();
      
      if (filename && filename.includes('.')) {
        return `${domain}/${filename}`;
      } else if (domain) {
        return domain;
      }
    } catch (e) {
      // 如果URL解析失败，返回URL的前20个字符
      return url.substring(0, 20) + (url.length > 20 ? '...' : '');
    }
    
    return '';
  }

  // 显示选中的视频详情
  function display_selected_video(video) {
    if (!video) {
      videoList.innerHTML = '<p>未选择视频</p>';
      return;
    }

    const statusText = video.isPlaying ? '播放中' : '已暂停';
    const durationText = format_duration(video.duration);
    const currentTimeText = video.currentTime ? video.currentTime.toFixed(1) + '秒' : '0秒';
    const url_info = get_url_info(video.url);
    
    let html = '<div class="video-items">';
    html += `
      <div class="video-item selected-video">
        <div class="video-info">
          <div class="video-title">${video.title || '未命名视频'}</div>
          <div class="video-url">${truncate_url(video.url, 50)}</div>
          <div class="video-status">${statusText} | 时长: ${durationText} | 当前: ${currentTimeText}</div>
          ${url_info ? `<div class="video-source">来源: ${url_info}</div>` : ''}
        </div>
        <div class="video-badge">已选择</div>
      </div>
    `;
    html += '</div>';

    videoList.innerHTML = html;
  }

  // 显示所有视频列表
  function display_all_videos(videos) {
    if (videos.length === 0) {
      videoList.innerHTML = `
        <div style="text-align: center; padding: 20px;">
          <p style="margin-bottom: 10px; color: #6c757d;">未检测到播放中的视频</p>
          <p style="font-size: 12px; color: #868e96; margin-bottom: 15px;">
            可能的原因：<br>
            • 页面正在加载中<br>
            • 视频元素尚未出现<br>
            • 视频被隐藏或动态加载
          </p>
          <p style="font-size: 12px; color: #495057;">
            建议：点击"刷新页面"按钮重新加载页面
          </p>
        </div>
      `;
      return;
    }

    let html = '<div class="video-items">';
    videos.forEach((video, index) => {
      const statusText = video.isPlaying ? '播放中' : '已暂停';
      const durationText = format_duration(video.duration);
      const currentTimeText = video.currentTime ? video.currentTime.toFixed(1) + '秒' : '0秒';
      const url_info = get_url_info(video.url);
      const isSelected = index === selected_video_index;
      
      html += `
        <div class="video-item ${isSelected ? 'selected-video' : ''}">
          <div class="video-info">
            <div class="video-title">${video.title || `视频 ${index + 1}`}</div>
            <div class="video-url">${truncate_url(video.url, 40)}</div>
            <div class="video-status">${statusText} | 时长: ${durationText} | 当前: ${currentTimeText}</div>
            ${url_info ? `<div class="video-source">来源: ${url_info}</div>` : ''}
          </div>
          ${isSelected ? '<div class="video-badge">已选择</div>' : ''}
        </div>
      `;
    });
    html += '</div>';

    videoList.innerHTML = html;
  }

  // 获取当前选中的视频
  function get_selected_video() {
    if (selected_video_index >= 0 && selected_video_index < current_videos.length) {
      return current_videos[selected_video_index];
    }
    return null;
  }

  // 初始化
  initialize_button_states();
  
  // 页面加载完成后自动检测视频
  setTimeout(() => {
    refresh_video_list();
  }, 100);
  
  // 刷新按钮
  refreshBtn.addEventListener('click', function() {
    refresh_video_list();
  });

  // 页面刷新按钮
  pageRefreshBtn.addEventListener('click', function() {
    refresh_page();
  });

  // 开始录制按钮
  startRecordingBtn.addEventListener('click', function() {
    start_recording();
  });

  // 停止录制按钮
  stopRecordingBtn.addEventListener('click', function() {
    stop_recording();
  });

  // 截图按钮
  screenshotBtn.addEventListener('click', function() {
    take_screenshot();
  });

  // 视频选择下拉框变化事件
  videoDropdown.addEventListener('change', function() {
    selected_video_index = parseInt(this.value);
    
    // 更新按钮状态
    const selected_video = get_selected_video();
    if (selected_video) {
      startRecordingBtn.disabled = false;
      screenshotBtn.disabled = false;
      statusDiv.textContent = `已选择: ${selected_video.title || `视频 ${selected_video_index + 1}`}`;
      // 更新上方视频列表显示
      display_selected_video(selected_video);
    } else {
      startRecordingBtn.disabled = true;
      screenshotBtn.disabled = true;
      statusDiv.textContent = '请选择要操作的视频';
      videoList.innerHTML = '<p>请选择要操作的视频</p>'; // 清空上方视频列表
    }
  });

  // 刷新视频列表
  function refresh_video_list() {
    statusDiv.textContent = '正在检测视频...';
    
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
      if (!tabs[0]) {
        statusDiv.textContent = '无法获取当前标签页';
        return;
      }
      
      const current_tab = tabs[0];
      
      // 检查URL是否支持content script
      if (!current_tab.url || current_tab.url.startsWith('chrome://') || 
          current_tab.url.startsWith('chrome-extension://') || 
          current_tab.url.startsWith('about:') ||
          current_tab.url.startsWith('moz-extension://') ||
          current_tab.url.startsWith('edge://')) {
        statusDiv.textContent = '当前页面不支持视频检测（浏览器内部页面）';
        videoList.innerHTML = `
          <div style="text-align: center; padding: 20px;">
            <p style="margin-bottom: 10px; color: #dc3545;">不支持的页面</p>
            <p style="font-size: 12px; color: #868e96; margin-bottom: 15px;">
              当前页面是浏览器内部页面，无法使用此扩展
            </p>
            <p style="font-size: 12px; color: #495057;">
              请访问普通网页（如：YouTube、Bilibili等）
            </p>
          </div>
        `;
        return;
      }
      
      // 检查页面是否已加载完成
      if (current_tab.status !== 'complete') {
        statusDiv.textContent = '页面正在加载中，请稍后再试';
        videoList.innerHTML = `
          <div style="text-align: center; padding: 20px;">
            <p style="margin-bottom: 10px; color: #ffc107;">页面加载中</p>
            <p style="font-size: 12px; color: #868e96; margin-bottom: 15px;">
              页面正在加载，请等待加载完成
            </p>
            <p style="font-size: 12px; color: #495057;">
              加载完成后点击"刷新检测"按钮
            </p>
          </div>
        `;
        return;
      }
      
      // 直接发送消息，因为content script已经在manifest.json中自动注入
      send_detection_message(current_tab);
    });
  }
  
  // 发送检测消息
  function send_detection_message(tab) {
    
    // 检查标签页状态
    if (tab.status !== 'complete') {
      statusDiv.textContent = '页面正在加载中，请稍后再试';
      videoList.innerHTML = `
        <div style="text-align: center; padding: 20px;">
          <p style="margin-bottom: 10px; color: #ffc107;">页面加载中</p>
          <p style="font-size: 12px; color: #868e96; margin-bottom: 15px;">
            页面正在加载，请等待加载完成
          </p>
          <p style="font-size: 12px; color: #495057;">
            加载完成后点击"刷新检测"按钮
          </p>
        </div>
      `;
      return;
    }
    
    // 检查URL是否支持
    if (!tab.url || tab.url.startsWith('chrome://') || 
        tab.url.startsWith('chrome-extension://') || 
        tab.url.startsWith('about:') ||
        tab.url.startsWith('moz-extension://') ||
        tab.url.startsWith('edge://')) {
      statusDiv.textContent = '当前页面不支持视频检测（浏览器内部页面）';
      videoList.innerHTML = `
        <div style="text-align: center; padding: 20px;">
          <p style="margin-bottom: 10px; color: #dc3545;">不支持的页面</p>
          <p style="font-size: 12px; color: #868e96; margin-bottom: 15px;">
            当前页面是浏览器内部页面，无法使用此扩展
          </p>
          <p style="font-size: 12px; color: #495057;">
            请访问普通网页（如：YouTube、Bilibili等）
          </p>
        </div>
      `;
      return;
    }
    
    // 尝试注入内容脚本
    chrome.scripting.executeScript({
      target: { tabId: tab.id },
      files: ['content.js']
    }).then(() => {
      // 延迟发送消息，确保脚本加载完成
      setTimeout(() => {
        send_video_detection_message(tab);
      }, 500);
    }).catch((error) => {
      statusDiv.textContent = '无法注入内容脚本，请刷新页面后重试';
      videoList.innerHTML = `
        <div style="text-align: center; padding: 20px;">
          <p style="margin-bottom: 10px; color: #dc3545;">脚本注入失败</p>
          <p style="font-size: 12px; color: #868e96; margin-bottom: 15px;">
            无法在页面中注入内容脚本
          </p>
          <p style="font-size: 12px; color: #495057;">
            建议：点击"刷新页面"按钮重新加载页面
          </p>
        </div>
      `;
    });
  }
  
  // 发送视频检测消息
  function send_video_detection_message(tab) {
    chrome.tabs.sendMessage(tab.id, {action: "getVideos"}, function(response) {
      if (chrome.runtime.lastError) {
        const error_message = chrome.runtime.lastError.message || '未知错误';
        
        // 根据错误类型提供不同的提示
        if (error_message.includes('Could not establish connection')) {
          statusDiv.textContent = '无法连接到页面，请刷新页面后重试';
          videoList.innerHTML = `
            <div style="text-align: center; padding: 20px;">
              <p style="margin-bottom: 10px; color: #dc3545;">连接失败</p>
              <p style="font-size: 12px; color: #868e96; margin-bottom: 15px;">
                可能的原因：<br>
                • 页面正在加载中<br>
                • 内容脚本未正确注入<br>
                • 页面结构发生变化
              </p>
              <p style="font-size: 12px; color: #495057;">
                建议：点击"刷新页面"按钮重新加载页面
              </p>
            </div>
          `;
        } else if (error_message.includes('Receiving end does not exist')) {
          statusDiv.textContent = '页面未响应，请刷新页面后重试';
          videoList.innerHTML = `
            <div style="text-align: center; padding: 20px;">
              <p style="margin-bottom: 10px; color: #dc3545;">页面未响应</p>
              <p style="font-size: 12px; color: #868e96; margin-bottom: 15px;">
                页面可能已重新加载或内容脚本失效
              </p>
              <p style="font-size: 12px; color: #495057;">
                建议：点击"刷新页面"按钮重新加载页面
              </p>
            </div>
          `;
        } else {
          handle_error(error_message, '检测视频');
          videoList.innerHTML = `
            <div style="text-align: center; padding: 20px;">
              <p style="margin-bottom: 10px; color: #dc3545;">检测失败</p>
              <p style="font-size: 12px; color: #868e96; margin-bottom: 15px;">
                错误信息：${error_message}
              </p>
              <p style="font-size: 12px; color: #495057;">
                建议：点击"刷新页面"按钮重新加载页面
              </p>
            </div>
          `;
        }
        return;
      }
      
      if (response && response.videos) {
        current_videos = response.videos; // 保存视频列表
        display_all_videos(response.videos); // 显示所有视频列表
        
        // 根据视频数量决定是否显示选择器
        toggle_video_selector(true, response.videos);
        
        if (response.videos.length > 0) {
          statusDiv.textContent = `检测到 ${response.videos.length} 个视频`;
          // 如果只有一个视频，自动选择
          if (response.videos.length === 1) {
            selected_video_index = 0;
            startRecordingBtn.disabled = false;
            screenshotBtn.disabled = false;
            // 更新上方视频列表显示
            display_selected_video(response.videos[0]);
          }
        } else {
          statusDiv.textContent = '未检测到视频';
        }
      } else {
        current_videos = [];
        videoList.innerHTML = '<p>未检测到播放中的视频</p>';
        toggle_video_selector(false);
        statusDiv.textContent = '未找到视频';
      }
    });
  }

  // 开始录制
  function start_recording() {
    if (isRecording) {
      statusDiv.textContent = '录制已在进行中';
      return;
    }

    const selected_video = get_selected_video();
    if (!selected_video) {
      statusDiv.textContent = '请先选择要录制的视频';
      return;
    }

    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
      if (!tabs[0]) {
        statusDiv.textContent = '无法获取当前标签页';
        return;
      }
      
      const current_tab = tabs[0];
      
      // 检查URL是否支持
      if (!current_tab.url || current_tab.url.startsWith('chrome://') || 
          current_tab.url.startsWith('chrome-extension://') || 
          current_tab.url.startsWith('about:') ||
          current_tab.url.startsWith('moz-extension://') ||
          current_tab.url.startsWith('edge://')) {
        statusDiv.textContent = '当前页面不支持录制功能';
        return;
      }
      
      // 确保内容脚本已注入
      chrome.scripting.executeScript({
        target: { tabId: current_tab.id },
        files: ['content.js']
      }).then(() => {
        // 延迟发送录制消息
        setTimeout(() => {
          send_start_recording_message(current_tab);
        }, 500);
      }).catch((error) => {
        console.error("录制前内容脚本注入失败:", error);
        statusDiv.textContent = '无法注入内容脚本，请刷新页面后重试';
      });
    });
  }
  
  // 发送开始录制消息
  function send_start_recording_message(tab) {
    chrome.tabs.sendMessage(tab.id, {
      action: "startRecording",
      videoIndex: selected_video_index
    }, function(response) {
      if (chrome.runtime.lastError) {
        const error_message = chrome.runtime.lastError.message || '未知错误';
        statusDiv.textContent = '录制失败：' + error_message;
        return;
      }
      
      if (response && response.success) {
        recordingStartTime = Date.now();
        set_recording_state(true);
        statusDiv.textContent = '录制已开始';
      } else {
        statusDiv.textContent = '录制失败：' + (response ? response.error : '未知错误');
      }
    });
  }

  // 停止录制
  function stop_recording() {
    if (!isRecording) {
      statusDiv.textContent = '没有正在进行的录制';
      return;
    }

    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
      if (!tabs[0]) {
        statusDiv.textContent = '无法获取当前标签页';
        return;
      }
      
      const current_tab = tabs[0];
      
      // 确保内容脚本已注入
      chrome.scripting.executeScript({
        target: { tabId: current_tab.id },
        files: ['content.js']
      }).then(() => {
        // 延迟发送停止录制消息
        setTimeout(() => {
          send_stop_recording_message(current_tab);
        }, 500);
      }).catch((error) => {
        console.error("停止录制前内容脚本注入失败:", error);
        statusDiv.textContent = '无法注入内容脚本，请刷新页面后重试';
      });
    });
  }
  
  // 发送停止录制消息
  function send_stop_recording_message(tab) {
    chrome.tabs.sendMessage(tab.id, {action: "stopRecording"}, function(response) {
      if (chrome.runtime.lastError) {
        const error_message = chrome.runtime.lastError.message || '未知错误';
        statusDiv.textContent = '停止录制失败：' + error_message;
        console.error("停止录制时发生错误:", error_message);
        return;
      }
      
      if (response && response.success) {
        const recordingDuration = Math.round((Date.now() - recordingStartTime) / 1000);
        set_recording_state(false);
        recordingStatus.textContent = `录制完成 (${recordingDuration}秒)`;
        statusDiv.textContent = '录制已停止，视频文件已生成';
        
        // 如果有下载链接，自动下载
        if (response.downloadUrl) {
          // 生成文件名，根据MIME类型确定扩展名
          const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
          let extension = 'webm';
          if (response.mimeType) {
            if (response.mimeType.includes('mp4')) {
              extension = 'mp4';
            } else if (response.mimeType.includes('ogg')) {
              extension = 'ogg';
            }
          }
          const filename = `recorded_video_${timestamp}.${extension}`;
          
          try {
            // 优先使用base64数据创建下载
            if (response.base64Data && response.base64Data.length > 0) {
              // 检查base64数据是否有效
              if (response.base64Data.startsWith('data:video/')) {
                chrome.downloads.download({
                  url: response.base64Data,
                  filename: filename,
                  saveAs: true
                }, function(downloadId) {
                  if (chrome.runtime.lastError) {
                    const error_message = chrome.runtime.lastError.message || '未知错误';
                    console.error("Base64下载失败:", error_message);
                    // 如果base64下载失败，尝试使用blob URL
                    chrome.downloads.download({
                      url: response.downloadUrl,
                      filename: filename,
                      saveAs: true
                    }, function(downloadId2) {
                      if (chrome.runtime.lastError) {
                        const error_message2 = chrome.runtime.lastError.message || '未知错误';
                        console.error("Blob URL下载也失败:", error_message2);
                        // 尝试通过background script下载
                        chrome.runtime.sendMessage({
                          action: "downloadVideo",
                          dataUrl: response.downloadUrl,
                          filename: filename
                        }, function(bgResponse) {
                          if (chrome.runtime.lastError) {
                            const bg_error = chrome.runtime.lastError.message || '未知错误';
                            console.error("Background下载失败:", bg_error);
                            // 尝试备用下载方法
                            fallback_download(response.base64Data, filename);
                          } else if (bgResponse && bgResponse.success) {
                            statusDiv.textContent = '视频下载已启动';
                          } else {
                            console.error("Background下载失败:", bgResponse ? bgResponse.error : '未知错误');
                            // 尝试备用下载方法
                            fallback_download(response.base64Data, filename);
                          }
                        });
                      } else {
                        statusDiv.textContent = '视频下载已启动';
                      }
                    });
                  } else {
                    statusDiv.textContent = '视频下载已启动';
                  }
                });
              } else {
                console.warn("Base64数据格式无效，使用blob URL");
                chrome.downloads.download({
                  url: response.downloadUrl,
                  filename: filename,
                  saveAs: true
                }, function(downloadId) {
                  if (chrome.runtime.lastError) {
                    const error_message = chrome.runtime.lastError.message || '未知错误';
                    console.error("下载失败:", error_message);
                    // 尝试通过background script下载
                    chrome.runtime.sendMessage({
                      action: "downloadVideo",
                      dataUrl: response.downloadUrl,
                      filename: filename
                    }, function(bgResponse) {
                      if (chrome.runtime.lastError) {
                        const bg_error = chrome.runtime.lastError.message || '未知错误';
                        console.error("Background下载失败:", bg_error);
                        // 尝试备用下载方法
                        fallback_download(response.base64Data, filename);
                      } else if (bgResponse && bgResponse.success) {
                        statusDiv.textContent = '视频下载已启动';
                      } else {
                        console.error("Background下载失败:", bgResponse ? bgResponse.error : '未知错误');
                        // 尝试备用下载方法
                        fallback_download(response.base64Data, filename);
                      }
                    });
                  } else {
                    statusDiv.textContent = '视频下载已启动';
                  }
                });
              }
            } else {
              // 使用原始URL下载
              chrome.downloads.download({
                url: response.downloadUrl,
                filename: filename,
                saveAs: true
              }, function(downloadId) {
                if (chrome.runtime.lastError) {
                  const error_message = chrome.runtime.lastError.message || '未知错误';
                  console.error("下载失败:", error_message);
                  statusDiv.textContent = '下载失败：' + error_message;
                } else {
                  statusDiv.textContent = '视频下载已启动';
                }
              });
            }
          } catch (error) {
            console.error("调用下载API时出错:", error);
            statusDiv.textContent = '下载失败：' + error.message;
          }
        } else {
          console.warn("响应中没有downloadUrl");
          statusDiv.textContent = '录制完成，但未获取到下载链接';
        }
      } else {
        const error_message = response ? response.error : '未知错误';
        statusDiv.textContent = '停止录制失败：' + error_message;
        console.error("停止录制失败:", error_message);
      }
    });
  }

  // 截图功能
  function take_screenshot() {
    const selected_video = get_selected_video();
    if (!selected_video) {
      statusDiv.textContent = '请先选择要截图的视频';
      return;
    }

    statusDiv.textContent = '正在生成截图...';
    
    chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
      if (!tabs[0]) {
        statusDiv.textContent = '无法获取当前标签页';
        return;
      }
      
      const current_tab = tabs[0];
      
      // 检查URL是否支持
      if (!current_tab.url || current_tab.url.startsWith('chrome://') || 
          current_tab.url.startsWith('chrome-extension://') || 
          current_tab.url.startsWith('about:') ||
          current_tab.url.startsWith('moz-extension://') ||
          current_tab.url.startsWith('edge://')) {
        statusDiv.textContent = '当前页面不支持截图功能';
        return;
      }
      
      // 确保内容脚本已注入
      chrome.scripting.executeScript({
        target: { tabId: current_tab.id },
        files: ['content.js']
      }).then(() => {
        // 延迟发送截图消息
        setTimeout(() => {
          send_screenshot_message(current_tab);
        }, 500);
      }).catch((error) => {
        console.error("截图前内容脚本注入失败:", error);
        statusDiv.textContent = '无法注入内容脚本，请刷新页面后重试';
      });
    });
  }
  
  // 发送截图消息
  function send_screenshot_message(tab) {
    chrome.tabs.sendMessage(tab.id, {
      action: "takeScreenshot",
      videoIndex: selected_video_index
    }, function(response) {
      if (chrome.runtime.lastError) {
        const error_message = chrome.runtime.lastError.message || '未知错误';
        statusDiv.textContent = '截图失败：' + error_message;
        return;
      }
      
      if (response && response.success) {
        statusDiv.textContent = '截图已生成';
        
        // 自动下载截图
        if (response.downloadUrl) {
          // 生成文件名
          const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
          const filename = `video_screenshot_${timestamp}.png`;
          
          try {
            // 优先使用base64数据创建下载
            if (response.base64Data && response.base64Data.length > 0) {
              // 检查base64数据是否有效
              if (response.base64Data.startsWith('data:image/')) {
                chrome.downloads.download({
                  url: response.base64Data,
                  filename: filename,
                  saveAs: true
                }, function(downloadId) {
                  if (chrome.runtime.lastError) {
                    const error_message = chrome.runtime.lastError.message || '未知错误';
                    console.error("Base64截图下载失败:", error_message);
                    // 如果base64下载失败，尝试使用blob URL
                    chrome.downloads.download({
                      url: response.downloadUrl,
                      filename: filename,
                      saveAs: true
                    }, function(downloadId2) {
                      if (chrome.runtime.lastError) {
                        const error_message2 = chrome.runtime.lastError.message || '未知错误';
                        console.error("Blob URL截图下载也失败:", error_message2);
                        // 尝试通过background script下载
                        chrome.runtime.sendMessage({
                          action: "downloadVideo",
                          dataUrl: response.downloadUrl,
                          filename: filename
                        }, function(bgResponse) {
                          if (chrome.runtime.lastError) {
                            const bg_error = chrome.runtime.lastError.message || '未知错误';
                            console.error("Background截图下载失败:", bg_error);
                            // 尝试备用下载方法
                            fallback_download(response.base64Data, filename);
                          } else if (bgResponse && bgResponse.success) {
                            statusDiv.textContent = '截图下载已启动';
                          } else {
                            console.error("Background截图下载失败:", bgResponse ? bgResponse.error : '未知错误');
                            // 尝试备用下载方法
                            fallback_download(response.base64Data, filename);
                          }
                        });
                      } else {
                        statusDiv.textContent = '截图下载已启动';
                      }
                    });
                  } else {
                    statusDiv.textContent = '截图下载已启动';
                  }
                });
              } else {
                console.warn("Base64截图数据格式无效，使用blob URL");
                chrome.downloads.download({
                  url: response.downloadUrl,
                  filename: filename,
                  saveAs: true
                }, function(downloadId) {
                  if (chrome.runtime.lastError) {
                    const error_message = chrome.runtime.lastError.message || '未知错误';
                    console.error("截图下载失败:", error_message);
                    // 尝试通过background script下载
                    chrome.runtime.sendMessage({
                      action: "downloadVideo",
                      dataUrl: response.downloadUrl,
                      filename: filename
                    }, function(bgResponse) {
                      if (chrome.runtime.lastError) {
                        const bg_error = chrome.runtime.lastError.message || '未知错误';
                        console.error("Background截图下载失败:", bg_error);
                        // 尝试备用下载方法
                        fallback_download(response.base64Data, filename);
                      } else if (bgResponse && bgResponse.success) {
                        statusDiv.textContent = '截图下载已启动';
                      } else {
                        console.error("Background截图下载失败:", bgResponse ? bgResponse.error : '未知错误');
                        statusDiv.textContent = '截图下载失败：' + (bgResponse ? bgResponse.error : '未知错误');
                      }
                    });
                  } else {
                    statusDiv.textContent = '截图下载已启动';
                  }
                });
              }
            } else {
              // 使用原始URL下载
              chrome.downloads.download({
                url: response.downloadUrl,
                filename: filename,
                saveAs: true
              }, function(downloadId) {
                if (chrome.runtime.lastError) {
                  const error_message = chrome.runtime.lastError.message || '未知错误';
                  console.error("截图下载失败:", error_message);
                  // 尝试通过background script下载
                  chrome.runtime.sendMessage({
                    action: "downloadVideo",
                    dataUrl: response.downloadUrl,
                    filename: filename
                  }, function(bgResponse) {
                    if (chrome.runtime.lastError) {
                      const bg_error = chrome.runtime.lastError.message || '未知错误';
                      console.error("Background截图下载失败:", bg_error);
                      statusDiv.textContent = '截图下载失败：' + bg_error;
                    } else if (bgResponse && bgResponse.success) {
                      console.log("Background截图下载成功，下载ID:", bgResponse.downloadId);
                      statusDiv.textContent = '截图下载已启动';
                    } else {
                      console.error("Background截图下载失败:", bgResponse ? bgResponse.error : '未知错误');
                      statusDiv.textContent = '截图下载失败：' + (bgResponse ? bgResponse.error : '未知错误');
                    }
                  });
                } else {
                  statusDiv.textContent = '截图下载已启动';
                }
              });
            }
          } catch (error) {
            console.error("调用截图下载API时出错:", error);
            statusDiv.textContent = '截图下载失败：' + error.message;
          }
        } else {
          console.warn("响应中没有downloadUrl");
          statusDiv.textContent = '截图已生成，但未获取到下载链接';
        }
      } else {
        statusDiv.textContent = '截图失败：' + (response ? response.error : '未知错误');
      }
    });
  }

  // 备用下载方法
  function fallback_download(dataUrl, filename) {
    
    try {
      // 创建一个临时的下载链接
      const link = document.createElement('a');
      link.href = dataUrl;
      link.download = filename;
      link.style.display = 'none';
      
      // 添加到页面并触发点击
      document.body.appendChild(link);
      link.click();
      document.body.removeChild(link);
      
      statusDiv.textContent = '下载已启动（备用方法）';
    } catch (error) {
      console.error("备用下载方法失败:", error);
      statusDiv.textContent = '备用下载方法失败：' + error.message;
    }
  }

  // 格式化时长
  function format_duration(seconds) {
    if (!seconds || seconds === Infinity) return '未知';
    
    const minutes = Math.floor(seconds / 60);
    const remainingSeconds = Math.floor(seconds % 60);
    return `${minutes}:${remainingSeconds.toString().padStart(2, '0')}`;
  }

  // 截断URL显示
  function truncate_url(url, maxLength) {
    if (url.length <= maxLength) return url;
    return url.substring(0, maxLength) + '...';
  }
});
  